from sklearn.datasets import load_diabetes
from sklearn.model_selection import train_test_split
from sklearn import metrics 
import numpy as np
from sklearn import linear_model, neighbors
from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process.kernels import RBF

diabetes = load_diabetes(); BLOOD_PRESSURE = 3;
X = diabetes.data
y = diabetes.target
X_train, X_test, y_train, y_test = train_test_split(X[:,BLOOD_PRESSURE], y, random_state = 60)
X_train = X_train[:, np.newaxis]    
X_test = X_test[:, np.newaxis]      

regressors = []; labels = ['Lasso', 'Ridge', 'Gaussian',
                           'Neighbors','Linear']
regressors.append(linear_model.Lasso(alpha=0.1))
regressors.append(linear_model.Ridge(alpha=0.01))
regressors.append(GaussianProcessRegressor(alpha=1, kernel = 
                                                    RBF(10, (0.01, 1e2))))
regressors.append(neighbors.KNeighborsRegressor(n_neighbors = 30))
regressors.append(linear_model.LinearRegression())

for regressor, label in zip(regressors,labels):
    regressor.fit(X_train, y_train)
    train_predict = regressor.predict(X_train)
    test_predict = regressor.predict(X_test)
    training_score = metrics.r2_score(y_train, train_predict)   
    testing_score = metrics.r2_score(y_test, test_predict)      
    training_MAE = metrics.mean_absolute_error(y_train,train_predict)   
    testing_MAE = metrics.mean_absolute_error(y_test, test_predict)
    training_MSD = metrics.mean_squared_error(y_train,train_predict)   
    testing_MSD = metrics.mean_squared_error(y_test, test_predict)
    print(label + ', R2 Score Training: {:.2f}'.format(training_score)+
                                ', Testing: {:.2f}'.format(testing_score))
    print(label + ', MAE. Training: {:.2f}'.format(training_MAE)+
                                  ', Testing: {:.2f}'.format(testing_MAE))
    print(label + ', MSD. Training: {:.2f}'.format(training_MSD)+
                                  ', Testing: {:.2f}'.format(testing_MSD))
    print()